
export default class video{
   
  constructor() {
    this.msg = {};
  }

  /**
    * subscribe 订阅事件
    * @param {*} key 事件标识符
    * @param {*} fn  事件方法
    */
  subscribe(key, fn){
    if(typeof fn != 'function') return
    if(!this.msg[key]) this.msg[key] = []
    this.msg[key].push(fn)
  }

  /**
    * 发布队列中所有事件，通知所有订阅者
    */
  publish() {
    let key = Array.prototype.shift.call(arguments)
    console.log(arguments);
    let fns = this.msg[key]
    if(!fns||!fns.length) return
    fns.forEach(res => {
      res.apply(null, arguments)
    })
  }

  /**
    * 事件删除，传入key值（fn选填）
    * @param {*} key 
    * @param {*} fn 
   */
  remove(key, fn){
    let fns = this.msg[key]
    
    if(!fns || !fns.length) return
    
    if(!fn) {
     delete this.msg[key] 
    } else {
        for(let i=0;i<fns.length;i++){
            let item = fns[i]
            if(item === fn || item.fn === fn) {
                fns.splice(i,1) 
                break
            }
        }
    }
  }

  /**
    * 获取当前 队列数
    */
  getQueue(key){
    if(!this.msg[key]) return undefined
    return this.msg[key].length
  }

}